package tests

import org.scalatest._
import tp1._

class EstudianteTest extends FlatSpec {

  var alumno = new Estudiante("Pepe", 10000)
  var cursada = new Aprobada()
  val orga = new Materia("Orga")
  cursada.initialize(7, orga, new Curso(new Docente("profe")))

  "un estudiante" should "deberia esta bien seteada" in {

    var a = new Estudiante("Jose", 11111)
    assert(a.legajo == 11111)
    assert(a.nombre == "Jose")
    assert(a.cursos.isEmpty)
  }

  "un estudiante" should "inscribirse a un curso" in {

    alumno.inscribir(new Curso(new Docente("El profe")))
    assert(alumno.cursos.size == 1)
  }

  "un estudiante" should "actualizar foja con una cursada cada vez que tiene una nota" in {
    alumno.actualizarFoja(cursada)
    assert(alumno.foja.notas.size == 1)
  }

  "un estudiante" should "devolver sus cursadas" in {
    var aprobada = new Aprobada()
    var desaprobada = new Desaprobada()
    var materia = new Materia("Persistencia")
    materia.initialize(2000, 1)
    var materia1 = new Materia("Persistencia")
    materia1.initialize(2000, 1)
    aprobada.initialize(8, materia,new Curso(new Docente("profe")))
    desaprobada.initialize(2, materia1,new Curso(new Docente("profe")))
    alumno.actualizarFoja(cursada)
    alumno.actualizarFoja(aprobada)
    alumno.actualizarFoja(desaprobada)
    alumno.actualizarFoja(new Abandonada())
    val cursadas = alumno.getCursadas
    assert(!cursadas.isEmpty)
    assert(cursadas.size == 5)
  }
  
//  "un estudiante" should "devolver las cursadas del año 2000" in {
//    assert(alumno.cursadasDelAño(2000).size == 2)
//  }

  "un estudiante" should "devolver 3 en sus cursadas aprobadas" in {

    assert(alumno.cursadasAprobadas == 3)
  }

  "un estudiante" should "devolver 3 en sus cursadas aprobadas cuando le pasamos una lista de cursadas" in {

    assert(alumno.cursadasAprobadas(alumno.getCursadas) == 3)
  }

  "un estudiante" should "devolver 1 en sus cursadas abandonadas" in {

    assert(alumno.cursosAbandonados == 1)
  }

  "un estudiante" should "devolver 1 en sus cursadas abandonadas cuando le pasamos una lista de cursadas" in {

    assert(alumno.cursosAbandonados(alumno.getCursadas) == 1)
  }
  
  "un estudiante" should "devolver 60.0 en los cursos iniciados sobre aprobados" in {
    assert(alumno.cursosAprobadoSobreIniciados == 60.0)
  }
  
  "un estudiante" should "devolver 6.0 en su promedio con aplazos" in {
    assert(alumno.promedioConAplazos == 6.0)
  }

   "un estudiante" should "devolver 7.33 en su promedio con aplazos" in {
    assert(alumno.promedioSinAplazos.toInt == 7)
  }
  
  "un estudiante" should "devolver una tabla de notas" in {
    var tabla = alumno.tablaDeNotas
    assert(tabla(1) == 0)
    assert(tabla(2) == 1)
    assert(tabla(3) == 0)
    assert(tabla(4) == 0)
    assert(tabla(5) == 0)
    assert(tabla(6) == 0)
    assert(tabla(7) == 2)
    assert(tabla(8) == 1)
    assert(tabla(9) == 0)
    assert(tabla(10) == 0)
    
  }
}  